#pragma once

#include <string>
#include <vector>
#include <filesystem>

namespace toolsLib
{
class Bash
{
  public:
    static Bash& getInstance();

    bool shCmd(const std::string&, std::string&);

    bool cpFile(const std::string&, const std::string&);

    bool mvFile(const std::string&, const std::string&);

    bool rmFile(const std::string&);

    bool mkDir(const std::string&);

    bool rmDir(const std::string&);

    bool touch(const std::string&);

    bool gzip(const std::string&);

    bool zip(const std::string&, const std::string&);

    // 获取文件夹中文件的名称，名称包含了绝对路径
    void list(const std::string& directory, std::vector<std::string>& files);

    // 获取文件的名称，不包含后缀
    void getName(const std::string& file, std::string& name);

  private:
    Bash();

    ~Bash();

    Bash(const Bash&) = delete;

    Bash& operator=(const Bash&) = delete;

    bool shCmd(char*);
};
}  // namespace toolsLib